package controllerInterfaces;

import java.io.File;

import view.ViewMain;
import viewInterfaces.IViewMain;
import viewInterfaces.IViewProjectManagement;
import controller.ControllerMain;
import controller.ControllerProjectManagement;
import enums.Use;

/**
*
* Interface of {@link ControllerProjectManagement} controller class according to Abstract Factory design pattern.
*/
public interface IControllerProjectManagement {

	
	/**
	 * Set the {@link Use} of project
	 * @param	use	Action over project
	 */	
	public void SetUse(Use use);

	
	/**
	 * Set the MVC++ Main Class for this controller.</br>
	 * ControllerMain is manipulable through {@link IControllerMain} interface
	 * @param	controllerMain	MVC++ Main Controller
	 * @see	ControllerMain
	 * @see IControllerMain
	 */		
	public void setMainController(IControllerMain controllerMain);

	
	/**
	 * Get the MVC++ Main View Main from {@link ControllerMain}.</br>
	 * The obtained main view is manipulable through its {@link IViewMain} interface.
	 * @return	main view
	 * @see		ViewMain
	 * @see		IViewMain
	 * @see		ControllerMain
	 */	
	public IViewMain getViewMain();

	
	/**
	 * Performs action such as create, load, save a {@link Project} from file.
	 * @see Project
	 */
	public void load();
	
	
	/**
	 * Create a new project with name according to parameter name.
	 * @param	name	project name  
	 */	
	public void createProject(String name);

	
	/**
	 * Set selected file associated with {@link Project}. 
	 * @param oi object input stream.
	 * @see Project
	 */
	public void SetSelectedFile(File sFile);
	
	
	/**
	 * Get View of this controller</br>
	 * This method is only used for realize unit testing.
	 * @return IViewProjectManagement
	 */
	public IViewProjectManagement GetView();	
}
